package com.hq.common.domain;

import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;
import java.util.List;
import java.util.Properties;

public class MailSender {
    /**
     *    * 发送邮件的props文件
     *    
     */
    private final transient Properties props = System.getProperties();
    /**
     *    * 邮件服务器登录验证
     *    
     */
    private transient MailAuthenticator authenticator;

    /**
     *  * 邮箱session
     *  
     */
    private transient Session session;

    public MailSender(){
        String username = props.getProperty("mail.smtp.username");
        String password = props.getProperty("mail.smtp.password");
        // 验证
        authenticator = new MailAuthenticator(username, password);
        // 创建session
        session = Session.getInstance(props, authenticator);
    }

    /**
     * 发送邮件
     *
     * @param recipient                 收件人邮箱地址
     * @param subject                   邮件主题
     * @param content                   邮件内容
     * @throws AddressException
     * @throws MessagingException
     */

    public void send(String recipient, String subject, Object content) throws AddressException, MessagingException {
        // 创建mime类型邮件
        final MimeMessage message = new MimeMessage(session);
        // 设置发信人
        message.setFrom(new InternetAddress(authenticator.getUsername()));
        // 设置收件人
        message.setRecipient(RecipientType.TO, new InternetAddress(recipient));
        // 设置主题
        message.setSubject(subject);
        // 设置邮件内容
        message.setContent(content.toString(), "text/html;charset=utf-8");
        // 发送
        Transport.send(message);
    }

    /**
     *      * 群发邮件
     *      *
     *      * @param recipients
     *      *                收件人们
     *      * @param subject
     *      *                主题
     *      * @param content
     *      *                内容
     *      * @throws AddressException
     *      * @throws MessagingException
     *      
     */

    public void send(List<String> recipients, String subject, Object content) throws AddressException, MessagingException {
        // 创建mime类型邮件
        final MimeMessage message = new MimeMessage(session);
        // 设置发信人
        message.setFrom(new InternetAddress(authenticator.getUsername()));
        // 设置收件人们
        final int num = recipients.size();
        InternetAddress[] addresses = new InternetAddress[num];
        for (int i = 0; i < num; i++) {
            addresses[i] = new InternetAddress(recipients.get(i));
        }
        message.setRecipients(RecipientType.TO, addresses);
        // 设置主题
        message.setSubject(subject);
        // 设置邮件内容
        message.setContent(content.toString(), "text/html;charset=utf-8");
        // 发送
        Transport.send(message);
    }

    public void send(String recipient, MailInfo mail) throws AddressException, MessagingException {
        send(recipient, mail.getSubject(), mail.getContent());
    }

    /**
     * 群发
     * @param recipients
     * @param mail
     * @throws AddressException
     * @throws MessagingException
     */
    public void send(List<String> recipients, MailInfo mail) throws AddressException, MessagingException {
        send(recipients, mail.getSubject(), mail.getContent());
    }

}